package com.hochschild.sgv.struts.action;

import com.hochschild.sgv.domain.PersonalSap;
import com.hochschild.sgv.domain.Usuario;
import com.hochschild.sgv.domain.Vacacion;
import com.hochschild.sgv.service.EquipoManager;
import com.hochschild.sgv.service.UsuarioManager;
import com.hochschild.sgv.service.VacacionesManager;

import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.springframework.beans.factory.annotation.Autowired;

public class VacacionAction extends DispatchAction {

    @Autowired
    private VacacionesManager vacacionesManager;
    @Autowired
    private UsuarioManager usuarioManager;

    public ActionForward cargarVacacionesPorUsuario(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {


        String idUsuario = request.getParameter("idUsuario");

        System.out.println("idUsuario : " + idUsuario);

        List<Vacacion> lstVacaciones = vacacionesManager.consultarVacaciones(idUsuario.toUpperCase());
        JSONArray jsonArray = new JSONArray();

        JSONObject jsonObject = new JSONObject();
        if (lstVacaciones.isEmpty()) {
            System.out.println("No hay vacaciones asociadas");
        } else {
            System.out.println("Tiene vacaciones  asociadas");
            for (Vacacion va : lstVacaciones) {
                JSONObject jsonObject1 = new JSONObject();
                jsonObject1.put("periodo", va.getPeriodo());
                jsonObject1.put("diasHabiles", va.getDiasHabiles());
                jsonObject1.put("diasGozados", va.getDiasGozados());
                jsonObject1.put("diasAprobados", va.getDiasAprobados());
                jsonObject1.put("saldo", va.getSaldo());
                jsonObject1.put("fechaInicio", va.getFechaInicio());
                jsonObject1.put("fechaFin", va.getFechaFin());
                jsonObject1.put("dias", va.getDias());
                jsonArray.add(jsonObject1);
            }

        }


        if (lstVacaciones.size() > 0) {
            String periodo = "";
            int saldoAcumulado = 0;

            for (Vacacion v : lstVacaciones) {
                if (!periodo.equals(v.getPeriodo())) {
                    saldoAcumulado += v.getSaldo();
                    periodo = v.getPeriodo();
                }
            }
          
            request.setAttribute("saldoAcumulado", saldoAcumulado);
            JSONObject jsonObject2 = new JSONObject();
            jsonObject2.put("saldoAcumulado", saldoAcumulado);
            jsonArray.add(jsonObject2);
        }

        jsonObject.put("resultadoDetalle", jsonArray);
        request.setAttribute("lstVacaciones", lstVacaciones);

        response.setContentType("application/json");
        response.getWriter().println(jsonObject.toString());
        return null;

    }

    public ActionForward cargarVacacionesPorUsuarioPopPup(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

        String idUsuario = request.getParameter("idUsuario");

        Usuario usuarioConsulta = new Usuario();
        usuarioConsulta.setIdUsuario(idUsuario);
        usuarioConsulta = usuarioManager.getUsuarioById(usuarioConsulta);

        if (usuarioConsulta != null) {
            List<Vacacion> lstVacaciones = vacacionesManager.consultarVacaciones(usuarioConsulta.getIdUsuario());

            if (lstVacaciones.size() > 0) {
                String periodo = "";
                int saldoAcumulado = 0;
                for (Vacacion v : lstVacaciones) {
                    if (!periodo.equals(v.getPeriodo())) {
                        saldoAcumulado += v.getSaldo();
                        periodo = v.getPeriodo();
                    }
                }

                request.setAttribute("saldoAcumulado", saldoAcumulado);
            }
            request.setAttribute("lstVacaciones", lstVacaciones);
            request.setAttribute("usuarioConsulta", usuarioConsulta);
        }

        return mapping.findForward("satisfactorio");
    }
    
     public ActionForward cargarVacaciones(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
         
         System.out.println("cargarVacaciones");
         HttpSession session = request.getSession();
         Usuario usuario = (Usuario) session.getAttribute("session_usuario");   
          //Obtiene Lista de Vacaciones SAP
            List<Vacacion> lstVacaciones = vacacionesManager.consultarVacaciones(usuario.getIdUsuario());
            if (lstVacaciones.size() > 0) {
                String periodo = "";
                    //    Se acumula el Saldo
                int saldoAcumulado = 0;
                int saldoAcumulado2 = 0;
                for (Vacacion v : lstVacaciones) {
                    saldoAcumulado2+=v.getSaldo();
                    if (!periodo.equals(v.getPeriodo())) {
                        saldoAcumulado += v.getSaldo();
                        periodo = v.getPeriodo();
                    }
                }
                System.out.println("saldoAcumulado: " + saldoAcumulado + " saldoAcumulado2: " + saldoAcumulado2);
                request.setAttribute("saldoAcumulado", saldoAcumulado);
            }
            request.setAttribute("lstVacaciones", lstVacaciones);
         return mapping.findForward("vacaciones");
     }
}
